#include<bits/stdc++.h>
#define int long long
#define N 4005
using namespace std;
int n,q;
int a[N][N],o[N][N];
const int mod=999999999;
inline int lowbit(int x){
    return x&-x;
}
inline void add(int x,int y,int k){
    if(k==0) return;
    for(int i=x;i<=n;i+=lowbit(i))
        for(int j=y;j<=n;j+=lowbit(j))
            o[i][j]+=k;
}
inline int sum(int x,int y){
    int res=0;
    for(int i=x;i;i-=lowbit(i))
        for(int j=y;j;j-=lowbit(j))
            res+=o[i][j];
    return res;
}
signed main(){
    freopen("fire.in","r",stdin);
    freopen("fire.out","w",stdout);
    scanf("%lld %lld",&n,&q);
    while(q--){
        int o,d,x,y,z;
        scanf("%lld",&o);
        if(o==1){
            scanf("%lld %lld %lld %lld",&d,&x,&y,&z);
            if(d==0){
                for(int i=1;i<=n;i++) add(x,i,-a[x][i]);
                for(int i=1;i<=n;i++){
                    if(y==1) a[x][i]&=z;
                    else if(y==2) a[x][i]|=z;
                    else if(y==3) a[x][i]^=z;
                    else (a[x][i]+=z)%=mod;
                }
                for(int i=1;i<=n;i++) add(x,i,a[x][i]);
            }
            else{
                for(int i=1;i<=n;i++) add(i,x,-a[i][x]);
                for(int i=1;i<=n;i++){
                    if(y==1) a[i][x]&=z;
                    else if(y==2) a[i][x]|=z;
                    else if(y==3) a[i][x]^=z;
                    else (a[i][x]+=z)%=mod;
                }
                for(int i=1;i<=n;i++) add(i,x,a[i][x]);
            }
        }
        else{
            scanf("%lld %lld",&x,&y);
            printf("%lld\n",sum(x,y));
        }
    }
    return 0;
}